home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / blk_ask.cpp < prev    next >
C/C++ Source or Header  |  1994-10-10  |  4KB  |  117 lines

  1. #include "blk_ask.h"
  2.  
  3. BlockAsk::BlockAsk(rect coordinates,              // Screen cells
  4.            char* tabName,                     // Table name
  5.            KH_STRTABLE* fields,               // Field names
  6.            char* fName,                       // File for swapping
  7.            BORDERS b_type,                    // Border type
  8.            int res,                           // Resize status
  9.            int elem_pat)                      // Buttons
  10.     : Block(coordinates, fName, "", 0, res, b_type, NO_BORDER,
  11.         0, 0, elem_pat)
  12.     {
  13.     table = new Ask(rect(coordinates.origin.X, coordinates.origin.Y,
  14.          coordinates.corner.X, coordinates.corner.Y - 1),
  15.          tabName, fields, "", 0, b_type, NO_BORDER, FIXED, 0);
  16.  
  17.     table->set_ret(1);
  18.     insert(table, 1);
  19.  
  20.     delete remove(get(pg_up_element));
  21.     delete remove(get(pg_dn_element));
  22.     delete remove(get(up_element));
  23.     delete remove(get(dn_element));
  24.  
  25.     int xw = 2 * pScreenSet->cell_width;
  26.     int xl = screenXL(coordinates.origin.X);
  27.     int xr = screenXR(coordinates.origin.X) + xw;
  28.     int yt = screenYT(coordinates.corner.Y) - pScreenSet->cell_height;
  29.     int yb = screenYB(coordinates.corner.Y);
  30.  
  31.     home_element = new Element(rect(xl + 2 * xw, yt, xr + 2 * xw, yb),
  32.              HOME_ELEMENT, BUTTON_BORDER, elem_pat, 1);
  33.     end_element = new Element(rect(xl + 3 * xw, yt, xr + 3 * xw, yb),
  34.              END_ELEMENT, BUTTON_BORDER, elem_pat, 1);
  35.     ok_element = new Element(rect(xl + 4 * xw, yt, xr + 4 * xw, yb),
  36.              OK_ELEMENT, BUTTON_BORDER, elem_pat, 1);
  37.  
  38.     add(ok_element);
  39.     add(home_element);
  40.     add(end_element);
  41.  
  42.     assign(table, left_element, AC_LEFT);
  43.     assign(table, right_element, AC_RIGHT);
  44.     assign(table, cancel_element, AC_CANCEL);
  45.     assign(table, home_element, AC_HOME);
  46.     assign(table, end_element, AC_END);
  47.     assign(table, ok_element, AC_OK);
  48.  
  49.     left_element->repose(rect(xl, yt, xr, yb));
  50.     right_element->repose(rect(xl + xw, yt, xr + xw, yb));
  51.     move_element->repose(rect(xl + 6 * xw, yt, xr + 6 * xw, yb));
  52.     resize_element->repose(rect(xl + 7 * xw, yt, xr + 7 * xw, yb));
  53.     cancel_element->repose(rect(xl + 5 * xw, yt, xr + 5 * xw, yb));
  54.     }
  55. /////////////////////////////////
  56. void BlockAsk::rearrange()
  57.     {
  58.     rect sz = textRect(w1->bound());
  59.     if(sz.width() < 32)
  60.     sz.corner.X = sz.origin.X + 20;
  61.     if(sz.height() < 6)
  62.     sz.corner.Y = sz.origin.Y + 6;
  63.     w1->repose(sz);
  64.     Block::rearrange();
  65.     rect r;
  66.     rect coord = textRect(r = w1->bound());
  67.  
  68.     int xw = 2 * pScreenSet->cell_width;
  69.     int xl = screenXL(r.origin.X);
  70.     int xr = screenXR(r.origin.X) + xw;
  71.     int yt = screenYT(r.corner.Y) - pScreenSet->cell_height;
  72.     int yb = screenYB(r.corner.Y);
  73.  
  74.     left_element->repose(rect(xl, yt, xr, yb));
  75.     right_element->repose(rect(xl + xw, yt, xr + xw, yb));
  76.     home_element->repose(rect(xl + 2 * xw, yt, xr + 2 * xw, yb));
  77.     end_element->repose(rect(xl + 3 * xw, yt, xr + 3 * xw, yb));
  78.     move_element->repose(rect(xl + 6 * xw, yt, xr + 6 * xw, yb));
  79.     resize_element->repose(rect(xl + 7 * xw, yt, xr + 7 * xw, yb));
  80.     cancel_element->repose(rect(xl + 5 * xw, yt, xr + 5 * xw, yb));
  81.     ok_element->repose(rect(xl + 4 * xw, yt, xr + 4 * xw, yb));
  82.  
  83.     table->repose(rect(coord.origin.X + 1 + textX(w1->get_shadow()),
  84.               coord.origin.Y + textY(w1->get_shadow()),
  85.               coord.corner.X - 1 - textX(w1->get_shadow()),
  86.               coord.corner.Y - 2 - textY(w1->get_shadow())));
  87.     }
  88. /////////////////////////
  89. void BlockAsk::hide()
  90.     {
  91.     table->hide();
  92.     w1->hide();
  93.     }
  94. //////////////////////////////
  95. /*
  96. void main()
  97.     {
  98.     if(!init_KNOW_HOW())
  99.     return;
  100.  
  101.     setfillstyle(SOLID_FILL, pColorSet->colors.BAK_COLOR);
  102.     bar(0, 0, getmaxx(), getmaxy());
  103.  
  104.     char* s[] = { "One", "Two", "Three", "Four", "Five" };
  105.     KH_STRTABLE* fields = new KH_STRTABLE(5, s);
  106.  
  107.     BlockAsk w(rect(10, 10, 60, 15), "demo.db", fields, "window.pcy",
  108.     SHOW_BORDER, MOVE | RESIZE, 19);
  109.  
  110.     w.show_window();
  111.     w.exe();
  112.     w.hide();
  113.  
  114.     close_KNOW_HOW();
  115.     closegraph();
  116.     }
  117. */